Async/Await হল Promises এর ওপর ভিত্তি করে একটি সিনট্যাক্স যা অ্যাসিনক্রোনাস কোড লেখার প্রক্রিয়াকে আরও সহজ ও পরিষ্কার করে। Promises ব্যবহার করেও অ্যাসিনক্রোনাস কোড লেখা সম্ভব, তবে Async/Await সিনট্যাক্সের মাধ্যমে কোডটি আরও সিনক্রোনাস দেখতে হয়, ফলে এটি পড়তে সহজ হয় এবং কোডের জটিলতা কমে যায়।
এখানে, আমরা Async/Await এর মাধ্যমে কোড কীভাবে সিম্পলিফাই (সহজতর) করা যায়, তা দেখব।
১. Promises ব্যবহার করা
প্রথমে, অ্যাসিনক্রোনাস কোডে Promises ব্যবহার করার মাধ্যমে কিছু ডাটা ফেচ করার উদাহরণ দেখা যাক:
Promise এর মাধ্যমে অ্যাসিনক্রোনাস কোড
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Fetched Data';
resolve(data);
}, 2000);
});
}
function processData() {
fetchData().then(data => {
console.log(data); // Output: Fetched Data
}).catch(err => {
console.log('Error:', err);
});
}
processData();এখানে, fetchData() একটি Promise রিটার্ন করছে এবং processData() ফাংশনটি সেই Promise এর মাধ্যমে ডেটা গ্রহণ করছে। এই পদ্ধতিতে .then() এবং .catch() এর মাধ্যমে সফল বা ত্রুটি পরিচালনা করা হয়।
২. Async/Await ব্যবহার করা
এখন, Async/Await ব্যবহার করে একই কাজ কীভাবে আরো সহজ এবং পরিষ্কারভাবে করা যায় তা দেখব।
Async/Await এর মাধ্যমে একই কোড
async function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = 'Fetched Data';
resolve(data);
}, 2000);
});
}
async function processData() {
try {
const data = await fetchData();
console.log(data); // Output: Fetched Data
} catch (err) {
console.log('Error:', err);
}
}
processData();এখানে, fetchData এবং processData দুটি ফাংশনই async। await কিওয়ার্ডটি ব্যবহার করে, আমরা fetchData() ফাংশনের রেজাল্টের জন্য অপেক্ষা করি এবং তা পাওয়ার পর কনসোলে প্রিন্ট করি। কোডটি অনেক বেশি সিনক্রোনাস দেখতে লাগে এবং কোডের জটিলতা অনেক কমে যায়।
৩. Multiple Async Functions একসাথে কল করা
ধরা যাক, আমাদের একাধিক অ্যাসিনক্রোনাস ফাংশন আছে এবং আমরা তাদের সমান্তরালভাবে (concurrently) একসাথে চালাতে চাই। Async/Await এর মাধ্যমে এটি করা সহজ।
Promise Chaining
function fetchData1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 1');
}, 1000);
});
}
function fetchData2() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 2');
}, 1500);
});
}
function processData() {
fetchData1().then(data1 => {
console.log(data1);
return fetchData2();
}).then(data2 => {
console.log(data2);
});
}
processData();এখানে, প্রথমে fetchData1() ফাংশনটি চলে এবং পরে .then() এর মাধ্যমে fetchData2() চালানো হয়।
Async/Await এর মাধ্যমে
async function fetchData1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 1');
}, 1000);
});
}
async function fetchData2() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 2');
}, 1500);
});
}
async function processData() {
const data1 = await fetchData1();
console.log(data1);
const data2 = await fetchData2();
console.log(data2);
}
processData();এখানে, দুটি ফাংশন একে একে কল করা হয়েছে। তবে, await এর মাধ্যমে প্রতিটি ফাংশনের জন্য অপেক্ষা করা হচ্ছে। এটি Promise chaining এর চেয়ে আরও পরিষ্কার এবং সিনক্রোনাস কোডের মতো মনে হয়।
৪. Multiple Async Functions একসাথে চালানো (Promise.all)
যখন আপনি একাধিক অ্যাসিনক্রোনাস অপারেশনকে একসাথে (সমান্তরালে) চালাতে চান, তখন Promise.all() ব্যবহার করতে পারেন। এটি সবগুলো প্রমিসের রেজাল্ট একত্রে ফেরত দেয়।
Promise.all ব্যবহার করা
async function fetchData1() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 1');
}, 1000);
});
}
async function fetchData2() {
return new Promise((resolve) => {
setTimeout(() => {
resolve('Data from API 2');
}, 1500);
});
}
async function processData() {
const [data1, data2] = await Promise.all([fetchData1(), fetchData2()]);
console.log(data1); // Output: Data from API 1
console.log(data2); // Output: Data from API 2
}
processData();এখানে, Promise.all() ব্যবহার করে দুইটি ফাংশনকে সমান্তরালে চালানো হচ্ছে, এবং একসাথে তাদের রেজাল্ট নিয়ে আসা হচ্ছে। এটি কোডকে আরও efficiency এবং performance এর দিক থেকে উন্নত করে।
সারাংশ
- Async/Await অ্যাসিনক্রোনাস কোড লেখাকে আরও সহজ ও পরিষ্কার করে। এটি সিনক্রোনাস কোডের মতো কাজ করে, তবে অ্যাসিনক্রোনাস প্রক্রিয়া পরিচালনা করে।
- Async/Await ব্যবহার করার মাধ্যমে, কোড আরও readable এবং maintainable হয়, যেখানে callback hell এবং promise chaining এর সমস্যাগুলি কমে যায়।
- Promise.all() ব্যবহার করে একাধিক অ্যাসিনক্রোনাস ফাংশন সমান্তরালে (concurrently) একসাথে চালানো যায়, যা সময় সাশ্রয়ী এবং আরও কার্যকরী হয়।
এভাবে, Async/Await ব্যবহারের মাধ্যমে আপনার কোড আরও সোজা, পরিষ্কার এবং পরিচালনা করা সহজ হয়।
Read more